package com.mf.utils;

import com.mf.entity.vo.UserVo;
import lombok.Getter;
import lombok.Setter;

/**
 * @Author: lmf
 * @Create: 2024/7/10 15:30
 * Description:
 */

@Setter
@Getter
public class AuthContextUtil {
    // 创建一个 ThreadLocal 对象，用于存储当前线程的用户信息
    private static final ThreadLocal<UserVo> threadLocal = new ThreadLocal<>();

    /**
     * 将用户信息存储在ThreadLocal中。
     *
     * @param user 用户id，不可为null。
     */
    public static void setUser(UserVo user){
        threadLocal.set(user);
    }

    /**
     * 从ThreadLocal中获取用户信息。
     *
     * @return UserVo 用户信息对象，如果之前没有设置过，则可能返回null。
     */
    public static UserVo getUser(){
        return threadLocal.get();
    }

    /**
     * 获取当前线程的用户id+用户名称
     */
    public static String getUserIdAndName() {
        UserVo userVo = threadLocal.get();
        if(userVo == null){
            return null;
        }
        return threadLocal.get().getNameAndId();
    }


    /**
     * 从 ThreadLocal 中移除当前线程的用户信息。
     */
    public static void remove(){
        threadLocal.remove();
    }
}
